// 导入axios对象
import axios from 'axios'
import { Toast } from 'vant'
import { removeToken, getToken } from './token'
import store from 'vuex'
import router from 'vue-router'

// 设置发送请求的基地址
const request = axios.create({
  baseURL: process.env.VUE_APP_BaseURL
})

// 设置axios的拦截器
// 发起请求之前的拦截对象
request.interceptors.request.use(
  function (config) {
    // console.log(config)
    // 获取每个接口请求的对象中的自己加的needToken属性
    const needToken = config.needToken

    // 判断此接口请求是否需要token
    if (needToken) {
      const token = getToken('token')
      if (token) {
        config.headers.authorization = `Bearer ${token}`
      }
    }

    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 数据响应回来之前的拦截
request.interceptors.response.use(
  res => {
    // 1.如果响应状态码为200 ,则原封返回res
    if (res.data.code === 200) {
      return res
    } else if (res.data.code === 401 || res.data.code === 403) {
      // 2.如果状态码为401或403 ,说明登录异常
      // 给出提示,删除token,改变登陆状态,打印服务器返回的错误信息,返回登陆页,响应错误信息
      Toast.fail('登陆异常')
      removeToken('token')
      store.commit('setIslogin', false)
      router.push('/login')
      return Promise.reject(new Error(res.data.message))
    } else {
      // 3.如果状态码为其他的,则直接提示错误的信息,返回错误数据
      Toast.fail(res.data.message)
      return Promise.reject(new Error(res.data.message))
    }

    // return res
  },
  error => {
    return Promise.reject(error)
  }
)

// 暴露出request
export default request
